table of contents
listen(2) | 2007-10-27-16:31 | listen(2) |
Назва¶
listen - прослуховує сполучення на сокеті
Синтаксис¶
#include <sys/socket.h>
іnt listen(іnt s, int backlog);
Опис¶
Для того, щоб приймати з'єднання, необхідно спочатку створити сокет за допомогою функції socket(2), потім показати готовність приймати з'єднання і встановити обмеження вхідних з'єднань за допомогою listen, і тільки після цього приймати з'єднання за допомогою accept(2). Системний виклик listen можна послати лише до сокетам типу SOCK_STREAM або SOCK_SEQPACKET.
Параметр backlog визначає максимальну довжину черги з'єднань. Якщо приходить запит на з'єднання, а черга в цей момент повна, то в цьому випадку клієнт отримає повідомлення про помилку ECONNREFUSED або, якщо використовуваний протокол підтримує повторну передачу даних, запит може бути зігноровано, щоб спробувати відповісти на повторний запит пізніше.
Примітки¶
Починаючи з версії Lіnux 2.2, поведінка параметра backlog на TCP-сокетах помінялась. Тепер замість числа незакінчених запитів він визначає чергу повністю встановлених сокетів, очікуючих, доки процес прийме їх. Максимальна довжина черги сокетів, частково встановлених, може бути задана параметром tcp_max_syn_backlog за допомогою sysctl. Якщо дозволене використання syncookies, логічна максимальна довжина не використовується і цей sysctl-параметр ігнорується. Для докладнішої інформації дивіться tcp(7).
Повернене значення¶
Успішне завершення виклику поверне нуль. У випадку помилки повертається -1, а змінній errno присвоюється номер помилки.
Коди помилок¶
- EADDRІNUSE
-
Інший сокет уже слухає на цьому порту. - EBADF
-
Аргумент s не являється чинним дескриптором. - ENOTSOCK
-
Параметр s не є сокетом. - EOPNOTSUPP
-
Цей тип сокету не підтримує операції listen.
Відповідність стандартам¶
Sіngle Unix, 4.4BSD, чернетка POSІX 1003.1g. Уперше системний виклик listen з'явився у 4.2BSD.
Помилки¶
Якщо сокет є AF_ІNET типу, а аргумент backlog є більшим ніж константа SOMAXCONN (128 у Lіnux 2.0 і 2.2), то він стинається до SOMAXCONN . Не покладайтеся на це значення при створенні сумісних з іншими системами додатків, тому що BSD (і деякі похідні системи) обмежує розмір черги до 5.
Дивіться також¶
2007-10-27-16:31 | © 2005-2007 DLOU, GNU FDL |